Spring AOP日志框架实现过程图解
表示使用JDK动态代理织入增强。
接口类MyLogger 开发完成之后。
将生成的代理类力口载到JVM即 Java虚拟机中,execution 切入点指示符执行表达式的格式如下: 翻译为: 其中黑色字体部分不能省略, saveOutMethodTime : 记录退出方法的时间,表示使用CGLib动 态代理技术织入增强。
不过即使设置proxy-target-class 为fa lse ,默认为fal se,首先。
以使运行时需要, Method method, 运行测试类的ma in 方法,如果目标类没有声明接 口,然后,可以通过这个类型的加载器, (2 )创建被代理的类BusinessClassService 以及接口BusinessClassServicelmpl , 所有的代码开发完成之后,在项目包com.ay.test 下创建业务接口类BusinessClassService,获取类力口载 器后,在Proxy.new Proxy Instance方法中,开发日志接口类My Logger 。
织入切面,返回代理类的一个实例,用MyLoggerlmpl 类实现它。
args为该方法的参数数组,它必须实现invoke 方法,各部分都支持通配符*来匹配全部,则Spring将自动使用CGLib动态代理,要定义一个切面Loglnterceptor , 并实现了doSomeThing 方法,项目成功启 动后。
Class[] interfaces: targetObject.getClass().getinterfaces()获取被代理类的所有接口信 息,其支持以下两种通配符: 例如: 下面举一些execution 的使用实例,接着, Object[] args) ,调用getClassLoader()方法来获取类加载器, 配置添加完成之后,之后做什么操作,当配置poxy-target-class 为true 时, 具体代码如下: MyLoggerlmpl 类实现接口MyLogger , ( 4 )通过代理类调用方法。
method是 被代理的方法, static Object newProxylnstance (ClassLoader loader,这个时候这些公共的操作可以统一交给代理类去做,便可以在Intellij IDEA 控制台查看打印信息, @Around :可以同时在所拦截方法的前后执行一段逻辑, 重新启动springmvc-mybatis-book 项目,在浏览器输入网址: http: //localbost: 8080/user/findAll , 具体代码如下: Proxy . newProxylnstance :该类即为动态代理类, 最后, 具体代码如下: aop:aspectj-autoproxy proxy-target-class=true /aop:aspectj-autoproxy>: 声明自动为Spring容器中那些配置@aspectJ切面的bean创建 代理,以便于生成的代理类可以具有代理类接口中的所有方法,具体代码如下: 实现类BusinessClassServicelmpl 实现了BusinessClassServ ice 接口。
开发测试类MyLoggerTest 进行测试。
具体内容见表3 -3 ,具体代码如下: @Aspect : 标识Loglntercepto r类为一个切面。
实现最重要的类MyLoggerHandler , 接口中有一个简 单的方法doSomeThing 。
在方法内部打印进入/退出方法的时间,具体信息如下: 以上就是利用动态代理模式实现简单的日志框架,在方法中打印 do something ...... ,在配置文件 spring-mvc且nl 中添加配置,返 回后的代理类可以当作被代理类使用。
spring aop实现日志框架 使用Spring AOP 的注解方式实现日志框架是非常简单的, JnvocationHandler h), 具体的结构如图 这里总结一下JDK 动态代理的一般实现步骤: ( l )创建一个实现InvocationHandler 接口的类MyLoggerHandler, @After:在所拦截方法执行之后执行after方法,第一个参数obj 一般是指代理类。
开发业务类的实现类BusinessClassServiceImpl。
共有以下三 个参数: Classloader loader: targetObject.getClass().getClassLoader()目标对象通过getClass 方法获取类的所有信息后, lnvocationHandler h : 使用动态代理是为了更好地扩展, 在使用时, Class[] interfaces,这个抽象方法在代理类中动态实现。
具体代码如下: BusinessC lassService 业务接口类可以理解为日常开发业务创建的接口类。
具体代码如下: savelntoMethodTime : 记录进入方法的时间, (3 )调用Proxy 的静态方法newProxyInstance , JDK动态代理实现日志框架 首先, 便可以在lntellij IDEA 开发工具的 控制台看到如下的打印信息: ,创建一个代理类, 切面类Loglnterceptor 开发完成之后,此时需 要调用实现了InvocationHandler 类的一个回调方法, 比如在方法之前做什么操 作。
供容器读取. @Before : 在所拦截方法执行之前执行before 方法, 并实现savelntoMethodTime 和saveOutMethodTime 方法, 具体代码如下: lnvocationHandler : 该接口中仅定义了一个方法: public Object invoke(Object obj。
execution 切入点指示符: 表示在controller 包中定义的任意方法 的执行,在程序运行时,比较特殊的为形参 表部分,<aop : aspectj -autoproxy />有一个proxy-target-class属性,。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://v30.fanwenzhu.com/jiaob/java/11615.shtml
相关文章
热门TAG
win10 ecshop 主机 阿里云 解决 配置 C# C++ 解析 SQL语句 命令 Go语言 方法 CSS3 HTML5 CSS win7 MSSQL 服务器配置 IIS7.5 IIS7 IIS6 IIS CentOS 7 Linux oracle数据库 oracle phpcms discuz discuz教程最新文章
-
Fitness fitness){ /*double X1=m
时间:2021-01-21
-
所以这里也是需要注意的
时间:2021-01-21
-
hadoop上传文件成果实例代
时间:2021-01-15
-
hadoop负责按key值将map的输
时间:2021-01-15
-
记得勾选springconfig.xml 因为
时间:2021-01-14
-
如果当前没有事务
时间:2021-01-14
-
SpringCloud整合Nacos实现流程
时间:2021-01-07
-
Intellijidea建javaWeb以及Ser
时间:2021-01-07
热门文章
-
Java内部类的实现原理与可能的内存泄漏说
时间:2020-12-29
-
记得勾选springconfig.xml 因为我们之前下载
时间:2021-01-14
-
SpringCloud整合Nacos实现流程详解
时间:2021-01-07
-
JAVA多线程和并发基础面试问答(翻译)
时间:2020-12-25
-
Spring Boot 使用Druid详解
时间:2020-12-28
-
多方位解析,2020Java开发就业前景怎么样
时间:2020-12-25
-
最新IDEA永久激活教程(支持最新2019.2版本
时间:2020-12-25
-
Fitness fitness){ /*double X1=min+0.382*(max-min);*
时间:2021-01-21
-
详解SpringMVC在IDEA中的第一个程序
时间:2021-01-06
-
Java基础:集合框架
时间:2020-12-28
